Flutter:在使用BottomNavigationBar从一个小部件导航到另一个小部件后,获取用于空值错误的空检查运算符

您所在的位置:网站首页 flutter bottomnavigationbar Flutter:在使用BottomNavigationBar从一个小部件导航到另一个小部件后,获取用于空值错误的空检查运算符

Flutter:在使用BottomNavigationBar从一个小部件导航到另一个小部件后,获取用于空值错误的空检查运算符

2023-04-02 12:53| 来源: 网络整理| 查看: 265

我目前正在构建Flutter移动的商店应用程序。我刚刚做了主页,在那里我将4个页面存储在一个列表中,并根据我选择的底部导航栏项目调用它们。当我启动应用程序时,所有的小部件和东西都工作正常,但是当我从底部导航栏转到另一个页面并返回MainPage时,我得到了用于空值错误的空检查操作符,我不知道为什么。只是要注意,我使用GetX的状态管理和Firebase的数据库。以下是扩展错误:

======== Exception caught by widgets library ======================================================= The following _CastError was thrown building PageBody(state: _PageBodyState#e8ed4): Null check operator used on a null value The relevant error-causing widget was: PageBody PageBody:file:///C:/Users/s_dob/StudioProjects/ auto_point_mobile/lib/pages/home/main_page.dart:62:20 When the exception was thrown, this was the stack: #0 GetBuilderState.initState (package:get/get_state_manager/src/simple/get_state.dart:134:40) #1 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5101:55) #2 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4944:5) #3 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3953:16) #4 Element.updateChild (package:flutter/src/widgets/framework.dart:3676:20) #5 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4993:16) #6 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5133:11) #7 Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5) #8 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2743:19) #9 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:863:21) #10 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:381:5) #11 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1289:15) #12 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1218:9) #13 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1076:5) #14 _invoke (dart:ui/hooks.dart:145:13) #15 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:338:5) #16 _drawFrame (dart:ui/hooks.dart:112:31) ======================================== ============================================================

MainPage小部件中的第62行是child:PageBody()下面是MainPage小部件:

class MainPage extends StatefulWidget { const MainPage({Key? key}) : super(key: key); @override State createState() => _State(); } class _State extends State { @override Widget build(BuildContext context) { return Scaffold( body: Column( children: [ //header Container( child: Container( margin: EdgeInsets.only(top: Dimensions.height30,bottom: Dimensions.height15), padding: EdgeInsets.only(left: Dimensions.width20,right: Dimensions.width20), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Column( children: [ BigText(text: "AutoPoint", color: AppColors.mainColor,size: 30), Row( children: [ SmallText(text: "AutoPoint", color: Colors.black), const Icon(Icons.arrow_drop_down_rounded), ], ) ], ), Center( child: Container( width: Dimensions.width45, height: Dimensions.height45, decoration: BoxDecoration( borderRadius: BorderRadius.circular(Dimensions.radius15), color: Colors.orange, ), child: Icon(Icons.search, color:Colors.white,size: Dimensions.icon24), ), ) ], ), ), ), //body Expanded(child: SingleChildScrollView( child: PageBody(), )), ], ), ); } }

这就是PageBody:

class PageBody extends StatefulWidget { const PageBody({Key? key}) : super(key: key); @override State createState() => _PageBodyState(); } class _PageBodyState extends State { PageController pageController = PageController(viewportFraction: 0.85); var _currentPageValue = 0.0; double _scaleFactor = 0.8; double _height = Dimensions.pageViewContainer; late final directory; Future _initAppDir() async { directory = await getApplicationDocumentsDirectory(); setState(() {}); } @override void initState(){ super.initState(); _initAppDir(); pageController.addListener(() { setState(() { _currentPageValue = pageController.page ?? _currentPageValue; }); }); } @override void dispose(){ pageController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return GetBuilder(builder: (products){ return products.isLoaded ? Column( children: [ //slider Container( height: Dimensions.pageView, child: PageView.builder( controller: pageController, itemCount: products.productList.length >= 7 ? 7 : products.productList.length, itemBuilder: (context, position){ return _buildPageItem(position, products.productList[position]); }), ), //dots DotsIndicator( dotsCount: products.productList.length = 7 ? 7 : products.productList.length, position: _currentPageValue, decorator: DotsDecorator( activeColor: AppColors.mainColor, size: const Size.square(9.0), activeSize: const Size(18.0, 9.0), activeShape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(5.0)), ), ), //populat text SizedBox(height: Dimensions.height30,), Container( margin: EdgeInsets.only(left: Dimensions.width30), child: Row( crossAxisAlignment: CrossAxisAlignment.end, children: [ BigText(text: "All"), SizedBox(width: Dimensions.width20,), Container( margin: const EdgeInsets.only(bottom: 3), child: BigText(text: ".",color: Colors.black26,), ), SizedBox(width: Dimensions.width20,), Container( child: SmallText(text: "products",), ), ], ), ), //list of food and images ListView.builder( physics: NeverScrollableScrollPhysics(), shrinkWrap: true, itemCount: products.productList.length, itemBuilder: (context, index){ return GestureDetector( onTap: (){ Get.toNamed(RouteHelper.getRecommended(index, directory.path, "main")); }, child: Container( margin: EdgeInsets.only(left: Dimensions.width20, right: Dimensions.width20, bottom: Dimensions.height10), child: Row( children: [ //image section Container( width: Dimensions.listViewImgSize, height: Dimensions.listViewImgSize, decoration: BoxDecoration( borderRadius: BorderRadius.circular(Dimensions.radius20), color: AppColors.mainColor, image: DecorationImage( image: FileImage(File(directory.path+ "/image/" + products.productList[index].product.id + '.png')), fit: BoxFit.cover, ), ), ), //text container Expanded( child: Container( height: Dimensions.listViewTextContSize, decoration: BoxDecoration( borderRadius: BorderRadius.only( topRight: Radius.circular(Dimensions.radius20), bottomRight: Radius.circular(Dimensions.radius20), ), color: Colors.white, ), child: Padding( padding: EdgeInsets.only(left: Dimensions.width10, right: Dimensions.width10), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ BigText(text: products.productList[index].product.name), SizedBox(height: Dimensions.height10,), Center(child: SmallText(text: "цена: ${products.productList[index].product.price}BGN.")), SizedBox(height: Dimensions.height10,), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ IconAndTextWidget(icon: Icons.card_membership_outlined, text: products.productList[index].product.typeOfProduct, iconColor: AppColors.mainColor), SizedBox(width: Dimensions.width3,), IconAndTextWidget(icon: Icons.inventory, text: "In Stock", iconColor: AppColors.mainColor), ] ), ], ), ), ), ), ], ), ), ); }), ], ): Column( children: [ SizedBox( width: Dimensions.width45 * 6.3, height: Dimensions.height45 * 6.3, ), //The loading animation SizedBox( width: Dimensions.width45 * 2, height: Dimensions.height45 * 2, child: CircularProgressIndicator( color: AppColors.mainColor, ), ) ], ); }); } Widget _buildPageItem(int index, ProductModel product){ Matrix4 matrix = new Matrix4.identity(); if(index == _currentPageValue.floor()){ var currScale = 1 - (_currentPageValue - index) * (1 - _scaleFactor); var currTrans = _height * (1 - currScale) /2; matrix = Matrix4.diagonal3Values(1, currScale ,1); matrix = Matrix4.diagonal3Values(1, currScale ,1)..setTranslationRaw(0, currTrans, 0); }else if(index == _currentPageValue.floor() + 1){ var currScale = _scaleFactor + (_currentPageValue-index+1) * (1 - _scaleFactor); var currTrans = _height * (1 - currScale) /2; matrix = Matrix4.diagonal3Values(1, currScale ,1); matrix = Matrix4.diagonal3Values(1, currScale ,1)..setTranslationRaw(0, currTrans, 0); }else if(index == _currentPageValue.floor() - 1){ var currScale = 1 - (_currentPageValue - index) * (1 - _scaleFactor); var currTrans = _height * (1 - currScale) /2; matrix = Matrix4.diagonal3Values(1, currScale ,1); matrix = Matrix4.diagonal3Values(1, currScale ,1)..setTranslationRaw(0, currTrans, 0); }else{ var currScale = 0.8; matrix = Matrix4.diagonal3Values(1, currScale ,1)..setTranslationRaw(0, _height * (1 - _scaleFactor)/2, 1); } return Transform( transform: matrix, child: Stack( children: [ GestureDetector( onTap: (){ Get.toNamed(RouteHelper.getDetails(index, directory.path, "main")); }, child: Container( height: _height, margin: EdgeInsets.only(left: Dimensions.width5, right: Dimensions.width5), decoration: BoxDecoration( borderRadius: BorderRadius.circular(Dimensions.radius20), color: AppColors.mainColor, image: DecorationImage( image: FileImage(File(directory.path+ "/image/" + product.product.id + '.png')), fit: BoxFit.cover, ), ), ), ), Align( alignment: Alignment.bottomCenter, child: Container( height: Dimensions.pageViewTextContainer, margin: EdgeInsets.only(left: Dimensions.width25, right: Dimensions.width25, bottom: Dimensions.height30), decoration: BoxDecoration( borderRadius: BorderRadius.circular(Dimensions.radius30), color: Colors.white, boxShadow: [ BoxShadow( color: Color(0xFFe8e8e8), blurRadius: 5.0, offset: Offset(0, 5), ), BoxShadow( color: Colors.white, offset: Offset(-5, 0), ), BoxShadow( color: Colors.white, offset: Offset(5, 0), ), ] ), child: Container( padding: EdgeInsets.only(top: Dimensions.height15,left: Dimensions.width15,right: Dimensions.width15), child: AppColumn(productModel: product), ), ), ), ], ), ); } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3